/*
 * @Author: mark
 * @Date: 2023-08-14 03:00:02
 * @LastEditors: mark
 * @LastEditTime: 2023-08-31 06:53:53
 * @FilePath: /自研/RuoYi_egg/ruoyi-egg/app/controller/system/sysDept.js
 * @Description:
 *
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
 */
const Controller = require("egg").Controller;

// 定义请求接口的请求参数规则
const queryRule = {
  ancestors: { type: "string", required: false },
  createBy: { type: "string", required: false },
  createTime: { type: "string", required: false },
  delFlag: { type: "string", required: false },
  deptId: { type: "string", required: false },
  deptName: { type: "string", required: false },
  email: { type: "string", required: false },
  leader: { type: "string", required: false },
  orderNum: { type: "string", required: false },
  parentId: { type: "string", required: false },
  phone: { type: "string", required: false },
  status: { type: "string", required: false },
  updateBy: { type: "string", required: false },
  updateTime: { type: "string", required: false },
};

/**
 * @Controller 部门
 */
class SysDeptController extends Controller {
  /**
   * 普通分页查询
   * @param {*} ctx
   */
  /**
   * @summary 部门表查询  
   * @description 部门表查询  
   * @Router get /system/dept/list
   * @request query string pageNum 页码 默认 1
   * @request query string pageSize 单页数量 默认 10
   * @request query string ancestors 祖级列表
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string delFlag 删除标志（0代表存在 2代表删除）
   * @request query string deptId 部门id
   * @request query string deptName 部门名称
   * @request query string email 邮箱
   * @request query string leader 负责人
   * @request query string orderNum 显示顺序
   * @request query string parentId 父部门id
   * @request query string phone 联系电话
   * @request query string status 部门状态（0正常 1停用）
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200 SystemDeptList 操作成功
   */
  async list(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    ctx.body = await ctx.service.system.sysDept.list(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * 获取列表数据
   * @param {*} ctx
   */
  async allList(ctx) {
    ctx.body = await ctx.service.system.sysDept.allList(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * 获取树形列表数据
   * @param {*} ctx
   */
  /**
   * @summary 部门表树查询  
   * @description 部门表树查询  
   * @Router get /system/dept/tree
   * @response 200 SystemDeptTree 操作成功
   */
  async tree(ctx) {
    ctx.body = await ctx.service.system.sysDept.tree(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * 查询非本部门及下属的部门
   * @param {*} ctx
   */
  /**
   * @summary 部门模块，查询所在部门链路排除自身和自身下级部门  
   * @description 部门模块，查询所在部门链路排除自身和自身下级部门  
   * @Router get /system/dept/list/exclude/{deptId}
   * @response 200 SystemDeptListExclude 操作成功
   */
  async excludeSelect(ctx) {
    ctx.body = await ctx.service.system.sysDept.excludeSelect(
      ctx.params.deptId
    );
    ctx.status = 200;
  }

  /**
   * 删除
   * @param {*} ctx
   */
  /**
   * @summary 部门表删除  
   * @description 部门表删除  
   * @Router delete /system/dept/{deptId}
   * @response 200   操作成功
   */
  async delete(ctx) {
    ctx.body = await ctx.service.system.sysDept.delete(ctx.params.deptId);
    ctx.status = 200;
  }

  /**
   * 更新
   * @param {*} ctx
   */
  /**
   * @summary 部门表修改  
   * @description 部门表修改  
   * @Router put /system/dept
   * @response 200   操作成功
   */
  async update(ctx) {
    ctx.body = await ctx.service.system.sysDept.update(ctx.request.body);
    ctx.status = 200;
  }

  /**
   * 获取详情
   * @param {*} ctx
   */
  /**
   * @summary 部门表详情  
   * @description 部门表详情  
   * @Router get /system/dept/{deptId}
   * @request query string ancestors 祖级列表
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string delFlag 删除标志（0代表存在 2代表删除）
   * @request query string deptId 部门id
   * @request query string deptName 部门名称
   * @request query string email 邮箱
   * @request query string leader 负责人
   * @request query string orderNum 显示顺序
   * @request query string parentId 父部门id
   * @request query string phone 联系电话
   * @request query string status 部门状态（0正常 1停用）
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200   操作成功
   */
  async detail(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    if (ctx.params.deptId == "tree") {
      ctx.body = await ctx.service.system.sysDept.tree(ctx.request.query);
    } else {
      ctx.body = await ctx.service.system.sysDept.detail(ctx.params.deptId);
    }
    ctx.status = 200;
  }

  /**
   * 创建
   * @param {*} ctx
   */
  /**
   * @summary 部门表新增  
   * @description 部门表新增  
   * @Router post /system/dept
   * @response 200   操作成功
   */
  async create(ctx) {
    ctx.body = await ctx.service.system.sysDept.create(ctx.request.body);
    ctx.status = 200;
  }

  /**
   * @summary 部门模块，查询所在部门链路排除自身和自身下级部门  
   * @description 部门模块，查询所在部门链路排除自身和自身下级部门  
   * @Router get /system/dept/list/exclude/{deptId}
   * @response 200 SystemDeptListExclude 操作成功
   */
  async excludeSelect(ctx) {
    ctx.body = await ctx.service.system.sysDept.excludeSelect(
      ctx.params.deptId
    );
    ctx.status = 200;
  }

  async downLoad(ctx) {
    let data = await ctx.service.system.sysDept.select(ctx.request.body, "new");

    let downLoadModule = ctx.model.SysDept.fieldRawAttributesMap;
    let columnData = [];
    for (var key in downLoadModule) {
      columnData.push({
        header: downLoadModule[key].comment,
        key: ctx.underlineToHump(key),
        width: 15,
      });
    }
    if (data.code == 200) {
      await ctx.service.exportExcel.publicDownLoad(columnData, data.data);
    } else {
      ctx.body = data;
      ctx.status = 200;
    }
  }
}

module.exports = SysDeptController;
